package com.bjsxt.livegoods.hotproduct.service.service.impl;

import com.bjsxt.livegoods.entity.Product;
import com.bjsxt.livegoods.hotproduct.service.service.HotProductService;
import com.bjsxt.livegoods.dao.product.ProductDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 热销商品服务提供者 --服务实现
 */
@Service
public class HotProductServiceImpl implements HotProductService {
    @Autowired
    private ProductDao  productDao;
    @Override
    public Map<String,Object> findHotProducts(String city) {
        Query query=new Query();
        //查询条件
        query.addCriteria(Criteria.where("city").is(city));
        //分页和排序，按照rentCount降序排列，查询第一页，每页四条数据。
        query.with(
                PageRequest.of(0,4,
                Sort.by(Sort.Direction.DESC,"rentCount"))
        );
        List<Product> list=this.productDao.findProducts(query);
        //保证查询结果长度为四，不足的时候，使用其他城市的热门商品做补足数据
        if(list.size()!=4){
          Query otherQuery=new Query();
          //查询条件
            otherQuery.addCriteria(Criteria.where("city").ne(city));
            otherQuery.with(
              PageRequest.of(0,4,
                      Sort.by(Sort.Direction.DESC,"rentCount"))
          );
          List<Product> others=this.productDao.findProducts(otherQuery);
          if((others.size()+list.size())<4){
              //所有城市热销商品小于4
              for(Product product:others){
                  list.add(product);
              }
          }else{
              //所有城市热销商品总量大于等于四
          int index=0;
          do{
             list.add(others.get(index));
             index++;
          }while(list.size()!=4);
          }
        }


        //组织返回结果。格式：{‘status’:200,data:['id','title','img','link']}
        Map<String,Object> result=new HashMap<>();
        result.put("status","200");
        List<Map<String,Object>> data=new ArrayList<>();
        for(Product product:list){
            Map<String,Object> map=new HashMap<>();
            map.put("id",product.getId());
            map.put("title",product.getTitle());
            map.put("img",product.getImg());
            map.put("link",product.getLink());
            data.add(map);
        }
        result.put("data",data);
        //result.put("data“，list); //返回商品集合，数据传输的内容较多，效率较低。
        return result;
    }
}
